﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Collections;

namespace Controleur
{
    /**
     * @author PAN
     * @date Juin 2010
     * @brief La classe ModeSuppression dérive de ModeEdition et correspond à l'outil Suppression l'onglet Edition
     */
    class ModeSuppression : ModeSelection
    {
        /***********************/
        /**** Constructeurs ****/
        /***********************/

        /** 
         * ModeSuppression(System.Drawing.Color _couleur, int _epaisseur)
         * 
         * @brief Constructeur
         * @param System.Drawing.Color _couleur : la couleur des traits par défaut
         * @param int _epaisseur : l'épaisseur des traits par défaut
         * @return void
         */
        public ModeSuppression(System.Drawing.Color _couleur, int _epaisseur):base(_couleur,_epaisseur)
        {
           
        }

        /** 
         * ModeSuppression()
         * 
         * @brief Constructeur par défaut
         * @return void
         */
        public ModeSuppression()
            : base()
        {
            
        }




        /***************************************/
        /** Actions spécifiques à chaque mode **/
        /***************************************/


        /**
         * ActionZoneDessin(Microsoft.Ink.Stroke _stroke)
         * 
         * @brief écriture sur la zone de dessin
         * @param Stroke _stroke : objet contenant de nombreuses informations (analogue à ensemble de points)
         * @return void
        */
        public override void ActionZoneDessin(Microsoft.Ink.Stroke _stroke) 
        {
            objets_selectionnes = null;

            System.Drawing.Rectangle rectangle_englobant = _stroke.GetBoundingBox();

            objets_selectionnes = controleur.selection_objets(rectangle_englobant);

            /*
            IEnumerator it = objets_selectionnes.GetEnumerator();

            while(it.MoveNext())
            {
               
                objets_selectionnes.Remove((Microsoft.Ink.Stroke)it.Current);

            }*/      
            Console.WriteLine("nombre d'objets selectionnés : {0}", objets_selectionnes.Count);
            if (objets_selectionnes.Count != 0)
            {
                IEnumerator it = objets_selectionnes.GetEnumerator();
                    while(it.MoveNext())
                    {
                        controleur.supprimerEncre((Microsoft.Ink.Stroke)it.Current);
                    }
            }
        }



        /**
         * ActionBouton()
         * 
         * @brief clic sur le bouton sur le côté du stylet
         * @return void
        */
        public override void ActionBouton()
        {
            controleur.changerMode(new ModeCrayon(couleur,epaisseur));
        }



        /**
        * ActionEffacer(Microsoft.Ink.Strokes _strokes)
        * 
        * @brief tracer un trait sur la zone de dessin avec la "gomme"
        * @param Strokes _strokes : objet contenant de nombreuses informations (analogue à ensemble de stroke)
        * @return void
        */
        public override void ActionEffacer(Microsoft.Ink.Strokes _strokes) { }

        /**
        * ActionDoubleClic(Microsoft.Ink.Strokes _strokes)
        * 
        * @brief Action de double clic
        * @param Strokes _strokes : objet contenant de nombreuses informations (analogue à ensemble de stroke)
        * @return void
        */
        public override void ActionDoubleClic(Microsoft.Ink.Strokes _strokes) { }

        //accesseurs
        public new Microsoft.Ink.Strokes getObjet_Selection()
        {
            return objets_selectionnes;
        }

    }
}